#include "workbench.h"
#include "PyObjectBase.h"

#include <bitset>

class WorkbenchPy : public PyObjectBase
{
protected:
	~WorkbenchPy(){}

public:
	static PyTypeObject   Type;
	static PyMethodDef    Methods[];
	static PyGetSetDef    GetterSetter[];
	virtual PyTypeObject* GetType() { return &Type; }

public:
	WorkbenchPy(Workbench* pcObject,PyTypeObject* T = &Type);
	static void PyDestructor(PyObject* P) { delete ((WorkbenchPy*)P); }
	static PyObject* PyMake(struct _typeobject*, PyObject*, PyObject*);	
	virtual int PyInit(PyObject* args, PyObject* k);

	typedef Workbench* PointerType;

	virtual PyObject* _repr();
	std::string representation() const;

	static PyObject* staticCallback_getMenuText(PyObject* self, PyObject* args);
	Py::String getMenuText();
	static void staticCallback_setMenuText(PyObject* self, PyObject* value, PyObject* args);
	void setMenuText(Py::String value);
	static PyObject* staticCallback_getToolTip(PyObject* self, PyObject* args);
	Py::String getTtoolTip();
	static void staticCallback_setToolTip(PyObject* self, PyObject* value, PyObject* args);
	static PyObject* staticCallback_getIcon(PyObject* self, PyObject* args);
	Py::String getIcon();
	static void staticCallback_setIcon(PyObject* self, PyObject* value, PyObject* args);

	static PyObject* staticCallback_Initialize(PyObject* self, PyObject* args);
	PyObject* Initialize(PyObject* args);
	static PyObject* staticCallback_GetClassName(PyObject* self, PyObject* args);
	PyObject* GetClassName(PyObject* args);

	Workbench* getWorkbenchPtr() const;

	PyObject* getCustomAttributes(const char* attr) const;
	int setCustomAttributes(const char* attr, PyObject* obj);
	PyObject* _getattr(const char* attr);              
	int _setattr(const char* attr, PyObject* value);
};